package com.ddm.controller.web;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ddm.dto.webDTO.MarketAnDTO;
import com.ddm.entity.webEntity.MarketA;
import com.ddm.entity.webEntity.MarketSp;
import com.ddm.result.PageResult;
import com.ddm.result.Result;
import com.ddm.service.webService.MarketAService;
import com.ddm.service.webService.MarketService;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * market接口
 *
 * @author lwj
 * @version 1.0
 */
@Api(tags = "市场分析管理")
@RestController
@RequestMapping("Web/market/An")
@Slf4j
public class MarketAnController {

    @Resource
    private MarketService marketService;
    @Autowired
    private MarketAService marketService1;
//    /**
//     * 分页查询市场分析报告
//     *
//     * @return 分页查询市场分析报告VO列表
//     */
//    @GetMapping("/List")
//    @ApiOperation("分页获取市场分析报告列表")
//    @JsonFormat(shape = JsonFormat.Shape.STRING)
//    public Result<PageResult> getMarketAnList(PageQueryDTO pageQueryDTO){
//        log.info("分页获取市场分析报告列表");
//        return Result.success(marketService.getMarketAnList(pageQueryDTO));
//    }
    /**
     * 分页查询市场分析报告
     *分用户类型
     * 模糊查询 标题 发布人 简介
     * @return 分页查询市场分析报告VO列表
     */
    @GetMapping("/TList")
    @ApiOperation("根据用户类型分页获取市场分析报告列表")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    public Result<PageResult> getMarketAnList(MarketAnDTO marketAnDTO){
        log.info("分页获取市场分析报告列表");
        System.out.println(""+marketAnDTO);
        return Result.success(marketService1.getMarketAnListByUserType(marketAnDTO));
    }
    /**
     ////     * 根据ID查询分析报告详情
     ////     *
     ////     * @param id 分析报告ID
     ////     * @return 分析报告详情
     ////     */
    @GetMapping("/GById")
    @ApiOperation("根据ID查询分析报告详情")
    public Result<MarketA> getById(@RequestParam Long id) {
        log.info("查询分析报告信息详情，ID：{}", id);
        MarketA c = marketService1.getById(id);
        return Result.success(c);
    }

    /**
     * 新增市场分析报告
     * @param marketAnDTO 市场分析报告DTO（包含aTitle、aPublishDate等字段）
     * @return 新增结果
     */
    @PostMapping("/add")
    @ApiOperation("新增市场分析报告")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    public Result<Boolean> addMarketAn(@RequestBody MarketAnDTO marketAnDTO) {
        log.info("新增市场分析报告: {}", marketAnDTO);
        boolean result = marketService1.addMarketAn(marketAnDTO);
        return Result.success(result);
    }

    /**
     * 更新市场分析报告
     * @param dto 市场分析报告DTO（包含aTitle、aPublishDate等字段）
     * @return 更新结果
     */
    @PutMapping("/update")
    @ApiOperation("更新市场分析报告")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    public Result<Boolean> updateMarketAn(@RequestBody MarketAnDTO dto) {

        log.info("更新市场分析报告: {}", dto);
        boolean result = marketService1.updateMarketAn(dto);
        return Result.success(result);
    }

    /**
     * 删除市场分析报告
     * @param id
     * @return 删除结果
     */
    @DeleteMapping("/delete")
    @ApiOperation("删除市场分析报告")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    public Result<Boolean> deleteMarketAn( long id) {

        log.info("删除市场分析报告: {}",id );
        boolean result = marketService1.deleteMarketAn(id);
        return Result.success(result);
    }

    @GetMapping("/pageByUserId")
    @ApiOperation("根据用户ID分页查询收藏的市场分析报告")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    public Result<PageResult> getRegulationByPageAndUser(
            Integer userId, Integer pageNum, Integer pageSize, String key)
    {
        Page<MarketA> page = new Page<>(pageNum, pageSize);
        // 调用新增的 service 方法，同时传入 userId 和 key
        IPage<MarketA> regulationPage = marketService1.getCollectedMarketAnByUserId(page, userId, key);

        // 使用 PageResult 封装分页信息
        PageResult pageResult = new PageResult(
                regulationPage.getTotal(),      // 总记录数
                regulationPage.getRecords()     // 当前页数据
        );

        return Result.success(pageResult);
    }
}